
package com.netease.xone.widget.richtext;

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.widget.EditText;

import com.netease.xone.widget.richtext.RichTextParser.OnRichTextMatchListener;

public abstract class BaseRichEditText extends EditText implements IRichText,
        OnRichTextMatchListener {

    private RichTextParser mPaser;

    public BaseRichEditText(Context context) {
        this(context, null);
    }

    public BaseRichEditText(Context context, AttributeSet attrs) {
        this(context, attrs, android.R.attr.editTextStyle);
    }

    public BaseRichEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mPaser = new RichTextParser();
        mPaser.setOnRichTextMatchListener(this);
        addTextChangedListener(new TextWatcher() {

            String tmpBefore;

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (!s.toString().equals(tmpBefore)) {
                    // 清楚已有样式
                    setText(s.toString());
                    setSelection(start + count);
                    // 设置新的样式
                    toRichText();
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                tmpBefore = s.toString();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }

    @Override
    public void addMatcher(String regular) {
        mPaser.addMatcher(regular);
    }

    @Override
    public void setRichTextEnable(boolean enable) {
        if (enable) {
            mPaser.setOnRichTextMatchListener(this);
        } else {
            mPaser.setOnRichTextMatchListener(null);
        }
    }

    @Override
    public void toRichText() {
        mPaser.parseRichText(getText());
    }

    @Override
    public void setRichText(CharSequence str) {
        setText(str);
        toRichText();
    }

}
